const db = uniCloud.database();
const selfUtils = require('self-utils')
module.exports = {
  _before: async function() { // 通用预处理器
    this.userInfo = await selfUtils.getUserInfo(this)
  },
  //新增商品，金额单位未'分'
  async add(params) {
    //判断是否登录
    if (!this.userInfo.uid) return this.userInfo
    //判断是否为管理员
    if (!this.userInfo.role.includes('manage')) {
      return {
        msg: '没有操作权限',
        code: -1
      }
    }
    params.price = Number(params.price).toFixed(2) * 100
    params.before_price = params.before_price ? Number(params.before_price).toFixed(2) * 100 : null
    return await db.collection("ly-mall-goods").add(params);
  },
  //获取所有商品列表
  async getList() {
    //获取商品列表时无需校验是否登录，否则无法刷新出来
    // if (!this.userInfo.uid) return this.userInfo
    let navData = await db.collection("ly-mall-category").get();
    let goods = await db.collection("ly-mall-goods").get();
    navData.data.forEach(item => {
      //根据分类id找到该分类下所有商品
      let proGroup = goods.data.filter(g => {
        return g.category_id == item._id
      })
      item.proGroup = proGroup; //将筛选出来的商品列表赋值到分类信息中
    })
    let newArr = navData.data.filter(item => {
      return item.proGroup.length
    })

    return {
      data: newArr
    };
  },
  //删除商品
  async remove(id) {
    //判断是否登录
    if (!this.userInfo.uid) return this.userInfo
    //判断是否为管理员
    if (!this.userInfo.role.includes('manage')) {
      return {
        msg: '没有操作权限',
        code: -1
      }
    }
    let res = await db.collection("ly-mall-goods").doc(id).remove();
    return res;
  },
  //根据商品id查询商品信息
  async getOne(id) {
    let res = await db.collection("ly-mall-goods").doc(id).get();
    res.data[0].price = res.data[0].price / 100
    res.data[0].before_price = res.data[0].before_price ? res.data[0].before_price / 100 : null
    return res
  },
  //更新时去掉数据产生的唯一id，否则会报错
  async update(params) {
    //判断是否登录
    if (!this.userInfo.uid) return this.userInfo
    //判断是否为管理员
    if (!this.userInfo.role.includes('manage')) {
      return {
        msg: '没有操作权限',
        code: -1
      }
    }

    let _params = {
      ...params
    };
    delete _params._id
    _params.price = Number(_params.price).toFixed(2) * 100 //存入数据库按照“分”来存储
    _params.before_price = _params.before_price ? Number(_params.before_price).toFixed(2) * 100 : null
    return await db.collection("ly-mall-goods").doc(params._id).update(_params)
  },
  //获取所有商品列表
  async searchGoodsList(keyWord) {
    let res = await db.collection("ly-mall-goods").where({
      name: new RegExp(keyWord, 'gi')
    }).get();
    return res;
  },
}